package core;

public class ConnectionChecker implements Runnable
{
	private boolean z;//флаг основного цыкла
	private Thread thread;
	private long SendCoordsTime;
	private int MaxSendCoordsTime;
	private ReconnectAction listener;
	private InterfaceAction interfaceListener;
	Connection connection;
	//Для автообновление интерфейса
	private long lastInterfaceUpdate;
	
	public ConnectionChecker(ReconnectAction listen,InterfaceAction ie,Connection conn)
	{
		listener = listen;
		interfaceListener = ie;
		connection = conn;
		SendCoordsTime = System.currentTimeMillis() - 20000;
		MaxSendCoordsTime = 60000;
		lastInterfaceUpdate = System.currentTimeMillis();
		start();
	}
	
	private void start()//Функция запуска потока
	{
		thread = new Thread(this);
		z = true;
		thread.start();
	}

	public void stop()//Функция остоновки потока
	{
		z = false;
	}
	
	public void setMaxSendCoordsTime(int value)
	{
		MaxSendCoordsTime = value;
	}
	
	public void run()//Основной цикл потока
	{
		while(z)
		{
			try
			{
				Thread.sleep(5000);
			}catch(java.lang.InterruptedException e){};

			if ((System.currentTimeMillis()-SendCoordsTime+30000)>MaxSendCoordsTime)
			{
				SendCoordsTime = System.currentTimeMillis();
				listener.reconnectAction();
			}
			//Обновляем интерфейс
			if ((System.currentTimeMillis()-lastInterfaceUpdate) > 10000)
			{
				interfaceListener.interfaceAction();
				lastInterfaceUpdate = System.currentTimeMillis();
			}
		}
	}
        
        public void updateLastInterfaceUpdateTime()
        {
            lastInterfaceUpdate = System.currentTimeMillis();
        }
}
